package cn.hdmis.security.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import cn.hdmis.bean.QueryResult;

public interface BaseService<T> {
	/**
	 * 根据实体查找全部对象
	 * 
	 * @param entiey
	 *            实体（T类型）
	 * @return 根据属性查找对象
	 */
	public List<T> findAllEntity();

   /**
	 * 根据属性查找对象
	 * 
	 * @param propertyName
	 *            属性（对应Bean）
	 * @param value
	 *            属性
	 * @return 根据属性查找对象
	 */
	public List<T> findByProperty(String propertyName, Object value);

	/**
	 * 根据实体查找对象
	 * 
	 * @param entiey
	 *            实体（T类型）
	 * @return 根据属性查找对象
	 */
	public List<T> findByEntity(Object entiey);

	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            实体id
	 */
	public void save(T entity);
	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            实体id
	 */
	public void saveOrUpdate(T entity);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 *            实体id
	 */
	public void update(T entity);

	/**
	 * 删除实体
	 * 
	 * @param entityClass
	 *            实体类
	 * @param id
	 *            实体id数组
	 */
	public void delete(Serializable id);
	
	public void deleteEntiey(T entity);
	/**
	 * 删除实体
	 * 
	 * @param entityClass
	 *            实体类
	 * @param id
	 *            实体id数组
	 */
	public void deleteList(List<Serializable> idList);
	/**
	 * 获取实体
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param entityId
	 *            实体id
	 * @return
	 */
	public T findByID(Serializable entityId);

	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @param wherejpql
	 *            where语句
	 * @param queryParams
	 *            查询参数
	 * @param orderby
	 *            排序序列
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams,
			final List<String> orderby);
	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @param queryParamsMap
	 *            where字段
	 * @param orderby
	 *            排序序列
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final Map<String, Object> queryParamsMap,
			final List<String> orderby);
	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @param wherejpql
	 *            where语句
	 * @param queryParams
	 *            查询参数
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams);
	
	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @param wherejpql
	 *            where语句
	 * @param queryParams
	 *            查询参数
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final Map<String, Object> queryParamsMap);
	

	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @param orderby
	 *            排序序列
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final List<String> orderby);

	/**
	 * 获取分页数据
	 * 
	 * @param firstindex
	 *            开始索引
	 * @param maxresult
	 *            每页显示记录数
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult);

	/**
	 * 获取所有对象
	 * 
	 * @return 所有对象
	 */
	public QueryResult<T> getScrollData();
	
	public QueryResult<T> getScrollDataCriteria(final int firstindex, final int maxresult, final Map<String, Object> queryParamsMap,
			final List<String> orderby);
}
